package br.com.simplex;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import br.com.simplex.util.Constantes;

/**
 * Representa a matriz do Simplex e as suas variaveis
 * 
 * @author Jonathan
 * 
 */
public class Matriz {

	private Double[][] A;
	private List<Variavel> variaveis = new ArrayList<Variavel>();
	private Map<Integer, Variavel> variaveisBasicas = new HashMap<Integer, Variavel>();
	private boolean isBigM;

	public Double[][] getA() {
		return A;
	}

	public void setA(Double[][] a) {
		A = a;
	}

	public List<Variavel> getVariaveis() {
		return variaveis;
	}

	public Map<Integer,Variavel> getVariaveisBasicas(){
		return variaveisBasicas;
	}
	
	public void addVariavel(Variavel variavel) {
		if (variavel.getLinhaAssociada() != -1) {
			variaveisBasicas.put(variavel.getLinhaAssociada(), variavel);
		}
		variaveis.add(variavel);
	}

	public void print() {
		StringBuffer buffer = new StringBuffer();
		buffer.append("   A:(");
		for (Variavel s : variaveis) {
			buffer.append(" ").append(s.getNome());
		}
		buffer.append(" )\n");
		for (int i = 0;i < A.length;i++) {
			if(i == 0){
				buffer.append("z: ");
			}else{
				buffer.append(variaveisBasicas.get(i).getNome()).append(": ");
			}
			for (Double a : A[i]) {
				if(Math.abs(a) >= Constantes.BigM){
					buffer.append(String
							.format("[%.2fM]", a / Constantes.BigM));
				}else{
					buffer.append(String
							.format("[%.2f]", a));
				}
				
			}
			buffer.append("\n");
		}
		System.out.println(buffer.toString());
	}

	public void setVariaveisBasicas(Map<Integer, Variavel> variaveisBasicas) {
		this.variaveisBasicas = variaveisBasicas;		
	}

	public boolean isBigM() {
		return isBigM;
	}

	public void setBigM(boolean isBigM) {
		this.isBigM = isBigM;
	}


}
